
Imports DevComponents.DotNetBar
Imports System.Windows.Forms
Imports System.Collections.Generic
Imports System.Linq
Imports System.Text
Imports quanlydulich.Helpers

Public Class GlobalUserManagers
    ''' <summary>
    ''' Retrieve name from enum function
    ''' </summary>
    ''' <param name="chucnang"></param>
    ''' <returns></returns>
    Public Shared Function RetrieveTenChucNang(ByVal chucnang As EnumChucNangHeThong) As String
        Dim tenchucnang = ""
        Select Case chucnang
            ' NGUOI DUNG
            Case EnumChucNangHeThong.THAYDOIMATKHAU
                tenchucnang = "Thay đổi mật khẩu"
                Exit Select
            Case EnumChucNangHeThong.QUANLYLOAINGUOIDUNG
                tenchucnang = "Quản lý loại người dùng"
                Exit Select
            Case EnumChucNangHeThong.QUANLYNGUOIDUNG
                tenchucnang = "Quản lý người dùng"
                Exit Select
            Case EnumChucNangHeThong.CHUCVU
                tenchucnang = "Chức vụ"
                Exit Select
            Case EnumChucNangHeThong.TOURDULICH
                tenchucnang = "Tour du lịch"
                Exit Select
            Case EnumChucNangHeThong.KHACHSAN
                tenchucnang = "Khách sạn"
                Exit Select
            Case EnumChucNangHeThong.NHAHANG
                tenchucnang = "Nhà hàng"
                Exit Select
            Case EnumChucNangHeThong.DIADIEM
                tenchucnang = "Địa điểm"
                Exit Select
            Case EnumChucNangHeThong.PHUONGTIEN
                tenchucnang = "Phương tiện"
                Exit Select
            Case EnumChucNangHeThong.KHACHHANG
                tenchucnang = "Khách hàng"
                Exit Select
            Case EnumChucNangHeThong.LOAIVE
                tenchucnang = "Loại vé"
                Exit Select
            Case EnumChucNangHeThong.LIENKETTOURNHAHANG
                tenchucnang = "Liên kết Tour - Nhà hàng"
                Exit Select
            Case EnumChucNangHeThong.LIENKETTOURKHACHSAN
                tenchucnang = "Liên kết Tour - Khách sạn"
                Exit Select
            Case EnumChucNangHeThong.LIENKETTOURPHUONGTIEN
                tenchucnang = "Liên kết Tour - Phương tiện"
                Exit Select
            Case EnumChucNangHeThong.LIENKETTOURDIADIEM
                tenchucnang = "Liên kết Tour - Địa điểm"
                Exit Select
            Case EnumChucNangHeThong.PHANCONGNHANVIENHUONGDANTOUR
                tenchucnang = "Phân công Nhân Viên hướng dẫn Tour"
                Exit Select
            Case EnumChucNangHeThong.LAPPHIEUDATTOUR
                tenchucnang = "Lập phiếu đặt tour"
                Exit Select
            Case EnumChucNangHeThong.DATVECHOKHACHHANG
                tenchucnang = "Đặt vé cho khách hàng"
                Exit Select
            Case EnumChucNangHeThong.TIMKIEMTOUR
                tenchucnang = "Tìm kiếm tour"
                Exit Select
            Case EnumChucNangHeThong.TIMKIEMKHACHHANG
                tenchucnang = "Tìm kiếm khách hàng"
                Exit Select
            Case EnumChucNangHeThong.TIMKIEMNHANVIEN
                tenchucnang = "Tim kiếm nhân viên"
                Exit Select
            Case EnumChucNangHeThong.THONGKEDANHSACHTOUR
                tenchucnang = "Thống kê danh sách Tour"
                Exit Select
            Case EnumChucNangHeThong.THONGKEDANHSACHKHACHHANGDATTOUR
                tenchucnang = "Thống kê danh sách khách hàng đặt Tour"
                Exit Select
            Case EnumChucNangHeThong.QUANLYCHUCNANGNHOMNGUOIDUNG
                tenchucnang = "Quản lý chức năng nhóm người dùng"
                Exit Select
        End Select
        Return tenchucnang
    End Function

    ''' <summary>
    ''' Retrieve enum function from name
    ''' </summary>
    ''' <param name="chucnang"></param>
    ''' <returns></returns>
    Public Shared Function RetrieveFuncsNotAllowUsing(ByVal tenchucnang As String) As EnumChucNangHeThong
        Dim func As EnumChucNangHeThong = EnumChucNangHeThong.THAYDOIMATKHAU
        If tenchucnang = "Thay đổi mật khẩu" Then
            func = EnumChucNangHeThong.THAYDOIMATKHAU
        ElseIf tenchucnang = "Quản lý loại người dùng" Then
            func = EnumChucNangHeThong.QUANLYLOAINGUOIDUNG
        ElseIf tenchucnang = "Quản lý người dùng" Then
            func = EnumChucNangHeThong.QUANLYNGUOIDUNG
        ElseIf tenchucnang = "Chức vụ" Then
            func = EnumChucNangHeThong.CHUCVU
        ElseIf tenchucnang = "Tour du lịch" Then
            func = EnumChucNangHeThong.TOURDULICH
        ElseIf tenchucnang = "Khách sạn" Then
            func = EnumChucNangHeThong.KHACHSAN
        ElseIf tenchucnang = "Nhà hàng" Then
            func = EnumChucNangHeThong.NHAHANG
        ElseIf tenchucnang = "Địa điểm" Then
            func = EnumChucNangHeThong.DIADIEM
        ElseIf tenchucnang = "Phương tiện" Then
            func = EnumChucNangHeThong.PHUONGTIEN
        ElseIf tenchucnang = "Khách hàng" Then
            func = EnumChucNangHeThong.KHACHHANG
        ElseIf tenchucnang = "Loại vé" Then
            func = EnumChucNangHeThong.LOAIVE
        ElseIf tenchucnang = "Liên kết Tour - Nhà hàng" Then
            func = EnumChucNangHeThong.LIENKETTOURNHAHANG
        ElseIf tenchucnang = "Liên kết Tour - Khách sạn" Then
            func = EnumChucNangHeThong.LIENKETTOURKHACHSAN
        ElseIf tenchucnang = "Liên kết Tour - Phương tiện" Then
            func = EnumChucNangHeThong.LIENKETTOURPHUONGTIEN
        ElseIf tenchucnang = "Liên kết Tour - Địa điểm" Then
            func = EnumChucNangHeThong.LIENKETTOURDIADIEM
        ElseIf tenchucnang = "Phân công Nhân Viên hướng dẫn Tour" Then
            func = EnumChucNangHeThong.PHANCONGNHANVIENHUONGDANTOUR
        ElseIf tenchucnang = "Lập phiếu đặt tour" Then
            func = EnumChucNangHeThong.LAPPHIEUDATTOUR
        ElseIf tenchucnang = "Đặt vé cho khách hàng" Then
            func = EnumChucNangHeThong.DATVECHOKHACHHANG
        ElseIf tenchucnang = "Tìm kiếm tour" Then
            func = EnumChucNangHeThong.TIMKIEMTOUR
        ElseIf tenchucnang = "Tìm kiếm khách hàng" Then
            func = EnumChucNangHeThong.TIMKIEMKHACHHANG
        ElseIf tenchucnang = "Tim kiếm nhân viên" Then
            func = EnumChucNangHeThong.TIMKIEMNHANVIEN
        ElseIf tenchucnang = "Thống kê danh sách Tour" Then
            func = EnumChucNangHeThong.THONGKEDANHSACHTOUR
        ElseIf tenchucnang = "Thống kê danh sách khách hàng đặt Tour" Then
            func = EnumChucNangHeThong.THONGKEDANHSACHKHACHHANGDATTOUR
        ElseIf tenchucnang = "Quản lý chức năng nhóm người dùng" Then
            func = EnumChucNangHeThong.QUANLYCHUCNANGNHOMNGUOIDUNG
        End If
        Return func
    End Function

    ''' <summary>
    ''' Mapping name of controls with specifed enums so that enable or disable some functions for each users
    ''' </summary>
    ''' <returns></returns>

    Public Shared Function InitFuncsMapping() As Dictionary(Of String, EnumChucNangHeThong)
        Dim dict = New Dictionary(Of String, EnumChucNangHeThong)()

        dict.Add("menDoiMatKhau", EnumChucNangHeThong.THAYDOIMATKHAU)
        dict.Add("menQuanLyLoaiNguoiDung", EnumChucNangHeThong.QUANLYLOAINGUOIDUNG)
        dict.Add("menQuanLyNguoiDung", EnumChucNangHeThong.QUANLYNGUOIDUNG)
        dict.Add("menChucVu", EnumChucNangHeThong.CHUCVU)
        dict.Add("menTour", EnumChucNangHeThong.TOURDULICH)
        dict.Add("menKhachSan", EnumChucNangHeThong.KHACHSAN)
        dict.Add("menNhaHang", EnumChucNangHeThong.NHAHANG)
        dict.Add("menDiaDiem", EnumChucNangHeThong.DIADIEM)
        dict.Add("menPhuongTien", EnumChucNangHeThong.PHUONGTIEN)
        dict.Add("menKhachHang", EnumChucNangHeThong.KHACHHANG)
        dict.Add("menLoaiVe", EnumChucNangHeThong.LOAIVE)
        dict.Add("menTourNhaHang", EnumChucNangHeThong.LIENKETTOURNHAHANG)
        dict.Add("menTourKhachSan", EnumChucNangHeThong.LIENKETTOURKHACHSAN)
        dict.Add("menTourPhuongTien", EnumChucNangHeThong.LIENKETTOURPHUONGTIEN)
        dict.Add("menTourDiaDiem", EnumChucNangHeThong.LIENKETTOURDIADIEM)
        dict.Add("menPhanCongNhanVien", EnumChucNangHeThong.PHANCONGNHANVIENHUONGDANTOUR)
        dict.Add("menLapPhieuDatTour", EnumChucNangHeThong.LAPPHIEUDATTOUR)
        dict.Add("menDatVe", EnumChucNangHeThong.DATVECHOKHACHHANG)
        dict.Add("menTimKiemTour", EnumChucNangHeThong.TIMKIEMTOUR)
        dict.Add("menTimKiemKH", EnumChucNangHeThong.TIMKIEMKHACHHANG)
        dict.Add("menTimKiemNV", EnumChucNangHeThong.TIMKIEMNHANVIEN)
        dict.Add("menThongKeDSTour", EnumChucNangHeThong.THONGKEDANHSACHTOUR)
        dict.Add("menThongKeDSKhachHang", EnumChucNangHeThong.THONGKEDANHSACHKHACHHANGDATTOUR)
        dict.Add("menQuanLyChucNangNhomNguoiDung", EnumChucNangHeThong.QUANLYCHUCNANGNHOMNGUOIDUNG)

        Return dict
    End Function

    Public Shared Function InitFuncsAllowUsing() As List(Of EnumChucNangHeThong)
        Dim objBus As CHUCNANGBUS = New CHUCNANGBUS(GlobalVars.g_strConnectionString)
        Dim lstAllFuncs As DataSet = objBus.SelectAll()
        Dim objBus2 As LOAINGUOIDUNG_CHUCNANGBUS = New LOAINGUOIDUNG_CHUCNANGBUS(GlobalVars.g_strConnectionString)
        Dim lstFuncsBelongToUser As DataSet = objBus2.SelectByIDLoaiNguoiDung(GlobalVars.g_CurrentUser.IDLoaiNguoiDung)
        Dim lst = New List(Of EnumChucNangHeThong)()

        For i As Integer = 0 To lstAllFuncs.Tables(0).Rows().Count - 1
            For j As Integer = 0 To lstFuncsBelongToUser.Tables(0).Rows().Count - 1
                If lstAllFuncs.Tables(0).Rows(i)("ID").ToString() = lstFuncsBelongToUser.Tables(0).Rows(j)("IDChucNang").ToString() Then
                    lst.Add(RetrieveFuncsNotAllowUsing(lstAllFuncs.Tables(0).Rows(i)("TenChucNang").ToString()))
                    Exit For
                End If
            Next
        Next
        Return lst
    End Function

    Private Shared Sub DisableCtrls(ByVal pnlMain As Panel, ByVal shortcut As String)
        For Each objControl As Control In pnlMain.Controls
            If objControl.[GetType]() Is GetType(MenuStrip) Then
                For Each _item As Object In DirectCast(objControl, MenuStrip).Items
                    DiableMenuItem(_item, shortcut)
                Next
            ElseIf objControl.[GetType]() Is GetType(ToolStrip) Then
                For Each _item As Object In DirectCast(objControl, ToolStrip).Items
                    If _item.[GetType]() Is GetType(ToolStripButton) Then
                        DiableToolStripItem(DirectCast(_item, ToolStripButton), shortcut)
                    End If
                Next
            ElseIf objControl.[GetType]() Is GetType(ExplorerBar) Then
                For Each _item As Object In DirectCast(objControl, ExplorerBar).Groups
                    DiableButtonItem(_item, shortcut)
                Next
            End If
        Next
    End Sub

    Private Shared Sub DiableButtonItem(ByVal parentItem As ExplorerBarGroupItem, ByVal shortcut As String)
        If parentItem IsNot Nothing AndAlso parentItem.SubItems.Count > 0 Then
            For Each _item As Object In parentItem.SubItems
                If _item.[GetType]() Is GetType(ButtonItem) Then
                    If shortcut = DirectCast(_item, ButtonItem).Name Then
                        DirectCast(_item, ButtonItem).Enabled = True
                        Return
                    End If
                End If
            Next
        End If
    End Sub

    Private Shared Sub DiableToolStripItem(ByVal parentItem As ToolStripButton, ByVal shortcut As String)
        If parentItem.Name = shortcut Then
            parentItem.Enabled = True
        End If
    End Sub

    Private Shared Sub DiableMenuItem(ByVal parentItem As ToolStripMenuItem, ByVal shortcut As String)
        If parentItem IsNot Nothing Then
            For Each _item As Object In parentItem.DropDownItems
                If _item.[GetType]() Is GetType(ToolStripMenuItem) Then
                    DiableMenuItem(DirectCast(_item, ToolStripMenuItem), shortcut)
                End If
            Next
            If parentItem.Name = shortcut Then
                parentItem.Enabled = True
            End If
        End If
    End Sub

    ''' <summary>
    ''' Disable some functions that user not allow using
    ''' </summary>
    Public Shared Sub EnableFuncAllowUsing(ByVal pnlMain As Panel, ByVal ctrlName As String)
        DisableCtrls(pnlMain, ctrlName)
    End Sub
End Class

